/**
 * @description：
 * 给定一个头结点为 head 的非空单链表，返回链表的中间结点 如果有两个中间结点，则返回第二个中间结点
 * 示例 1：
 * 输入：[1,2,3,4,5]
 * 输出：此列表中的结点 3 (序列化形式：[3,4,5])
 * @author: yangyahui01
 * @date: 12/31/24 1:42 PM
 */
public class 链表的中间节点 {

    public ListNode middleNode(ListNode head) {

        ListNode p1 = head;  //慢指针
        ListNode p2 = head; //快指针

        /**
         * 注意这个临界判断条件,动手画画,这道题应该是大于3个节点的
         */
        while (p2 != null && p2.next != null) {
            p1 = p1.next;
            p2 = p2.next.next;
        }

        return p1;
    }
}
